package com.wt.admin.config;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.aizuda.easy.security.util.LocalUtil;
import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler;
import com.wt.admin.domain.vo.UserVO;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.*;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.schema.Table;


public class DataPermissionHandler implements MultiDataPermissionHandler {
    @Override
    public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
        try {
            UserVO user = LocalUtil.getUserOrNull();
            if (ObjectUtil.isEmpty(user)) {
                return null;
            }
            String s = user.getDataPermissions().get(table.getName().toLowerCase());
            if (StrUtil.isBlank(s)) {
                return null;
            }
            // 获取表的别名，没有别名使用表名
            String alias = ObjectUtil.isNotEmpty(table.getAlias()) ? table.getAlias().getName().toLowerCase() : table.getName().toLowerCase();
            // 替换条件里面的占位符
            s = s.replaceAll("\\{table}", alias);
//            s = s.replaceAll("\\{table}", alias);
            Expression expression = CCJSqlParserUtil.parseCondExpression(s);
            return expression;
        } catch (JSQLParserException e) {
            e.printStackTrace();
            return null;
        }
    }

}
